package com.becca.cake.core.excel.excelWriter;

import java.io.OutputStream;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import jxl.write.WritableCell;
import jxl.write.WritableCellFormat;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;

/**
 * Excel导出接口定义
 * @author hejinguo
 * @version $Id: ExcelWriteHandle.java, v 0.1 2014-4-23 下午09:21:34
 */
public interface BaseExcelHandle {
    /**
     * 创建Excel工作薄
     * @param file
     * @return
     */
    WritableWorkbook createWorkBook(OutputStream stream);

    /**
     * @Title createSheet
     * 创建Excel工作表名
     * @param workBook WritableWorkbook对象
     * @param sheetName Sheet的名称
     * @param row 索引值
     * @param 设定文件
     * @return WritableSheet 返回类型
     * @throws
     */
    WritableSheet createSheet(WritableWorkbook workBook, String sheetName, int row);

    /**
     * @throws WriteException
     * @Title setExcelTitle
     * 设置Excel标题的样式,此方法支持设置多个标题，第一个为大标题，后面的都是小标题
     * @param sheet WritableSheet对象
     * @param reportTitle 标题格式参数
     * @param length 标题所占的列数 设定文件
     */
    void setExcelTitle(WritableSheet sheet, String reportTitle[][], int length)
                                                                               throws WriteException;

    /**
     * @throws WriteException
     * @Title createColumnHeader
     * 创建Excel列字段头样式以及信息
     * @param sheet WritableSheet对象
     * @param columnHeader 列名称数组
     * @param row 开始填充的位置索引 设定文件
     */
    void createColumnHeader(WritableSheet sheet, String columnHeader[], int row)
                                                                                throws WriteException;

    /**
     * @throws WriteException
     * @Title addDataToExcel
     * 向Excel表中填充数据 以及给数据样式
     * @param sheet WritableSheet对象
     * @param data 数据源
     * @param row 填充起始行数索引 设定文件
     * @return void 返回类型
     * @throws
     */
    void addDataToExcel(WritableSheet sheet, Object data[][], int row) throws WriteException;

    /**
     * @throws WriteException
     * @throws RowsExceededException
     * @Title: createFooter
     * 添加统计
     * @param sheet
     * @param columnFooter
     * @param row 设定文件
     * @return void 返回类型
     * @throws
     */
    void createFooter(WritableSheet sheet, String columnFooter[][], int row) throws WriteException;

    /**
     * 设置单元格类型
     * @param indexColumn  行
     * @param indexRow   列
     * @param data 数据值
     * @param type 数据类型
     * @return
     * @throws WriteException 
     */
    WritableCell cell(int indexColumn, int indexRow, Object data, WritableCellFormat normalFormat,
                      WritableCellFormat doubleFormat, WritableCellFormat longFormat)
                                                                                     throws WriteException;

    /**
     * 导出并下载Excel
     * @param f
     * @param info
     */
    void writeEcxcel(ExcelInfo info, HttpServletRequest request, HttpServletResponse response);
}
